#ifndef _CLI_H_
#define _CLI_H_

#include <stddef.h>
#include <stdint.h>
#include "../common_typedef.h"

#define CMD_LEN_MAX 128
#define CMD_KEY_F2   "OQ"
#define CMD_KEY_UP   { '[', 0x41 }
#define CMD_KEY_DOWN { '[', 0x42 }
#define CMD_KEY_BK   { 0x08 }
#define CMD_KEY_RTN  { '\r' }

typedef int (*CliTaskCallBack)(const char *, size_t);
typedef struct
{
    char cmd[CMD_LEN_MAX];
    CliTaskCallBack exe;
} CmdPair;

/* 命令行LOG方法 */
int LOG(const char *initStr, ...);
int LogEvent(const char *str, ...);
int LogBar(const char *str, ...);
int LOGCritcal(const char *str, ...);
int LOGStr(const char *str, ...); // 不带换行符
int LOGTop(const char *str, ...); // 写顶部状态栏
/* 初始化命令界面 */
void CliInit(CmdPair* cmdList, int cmdListLen);
void CliRegKeyAction(CmdPair cmdList);
/* 命令行单字节处理方法 */
void CliProcByte(char ch); // 单个字节处理
/* Dump默认弱实现 */
extern int Dump(const char *str, size_t len);
/* 命令行等待用户输入 */
void WaitUsrInput(void);
/* 命令行清空 */
void FlushRx(void); // 清缓冲区
/* 工具格式化输出 */
void PutHex(const char* str, size_t len);
/* 获取编译版本信息 */
void GetVerCode(char* verStr, size_t len);

#endif // _CLI_H_
